package org.soderiakelvy.controller.reparto;

import java.util.List;
import java.util.Map;


import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.context.FacesContext;

import org.soderiakelvy.controller.util.Constante;
import org.soderiakelvy.model.domain.PersonalVO;
import org.soderiakelvy.model.domain.RepartoVO;
import org.soderiakelvy.model.domain.VehiculoVO;
import org.soderiakelvy.model.service.RepartoServicio;
import org.soderiakelvy.model.service.imp.RepartoServicioImp;
import org.soderiakelvy.model.util.ConstantModel;

@ManagedBean
public class RepartoEdit {
	
	private RepartoServicio repartoServicio;
	private RepartoVO reparto;
	private List<VehiculoVO> vehiculosDisponibles;
	private List<PersonalVO> repartidoresDisponibles;
	
	//--- Constructor ---
	public RepartoEdit(){
		repartoServicio = new RepartoServicioImp();		
		
		FacesContext fc = FacesContext.getCurrentInstance();
		Map<String,Object> sessionParams = fc.getExternalContext().getSessionMap();
		reparto = (RepartoVO) sessionParams.get("reparto");
		
		vehiculosDisponibles = repartoServicio.getVehiculoByEstado(ConstantModel.ESTADO_VEHICULO_LIBRE);
		repartidoresDisponibles = repartoServicio.getPersonalByCategoria("Repartidores");
	}
	
	

	public String editarReparto(RepartoVO r) {
		String result = repartoServicio.updateReparto(r);
		if(result.equals(ConstantModel.SUCCESS)){
			return Constante.URL_REPARTO_LIST;
		}else {
			if(result.equals(ConstantModel.NOMBRE_DUPLICADO)){
				FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN,"Nombre Duplicado", "El nombre ingresado ya se encuentra en la Base de Datos"));
			}else {
				FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL,"Error al Insertar un registro", "Surgio un error al ingresar un registro. Comuicarse con el responsable del Sistema"));
			}
			return null;
		}
	}
	
	public String cancelarModificacion(){
		return Constante.URL_REPARTO_LIST;
	}
		
	public RepartoVO getReparto() {
		return reparto;
	}

	public void setReparto(RepartoVO reparto) {
		this.reparto = reparto;
	}

	public List<VehiculoVO> getVehiculosDisponibles() {
		return vehiculosDisponibles;
	}

	public void setVehiculosDisponibles(List<VehiculoVO> vehiculosDisponibles) {
		this.vehiculosDisponibles = vehiculosDisponibles;
	}

	public List<PersonalVO> getRepartidoresDisponibles() {
		return repartidoresDisponibles;
	}

	public void setRepartidoresDisponibles(List<PersonalVO> repartidoresDisponibles) {
		this.repartidoresDisponibles = repartidoresDisponibles;
	}	
	
}
